package com.boot.ys.mybatisplus.script;

import com.boot.ys.mybatisplus.entity.dto.KeyValueDto;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 在图片上添加文字背景
 *
 * @author: 杨升
 * @date: 2024-09-03 21:26
 * @Version 1.0
 */

public class ImageAddText {

    public static void main(String[] args) {


        ArrayList<KeyValueDto> nameList = new ArrayList<KeyValueDto>();

        // key 是输入，value是输出
        nameList.add(KeyValueDto.builder()
                .key("E:\\BaiduNetdiskDownload\\上传h5商城数据库\\SSM1.0")
                .value("E:\\BaiduNetdiskDownload\\上传H5数据库打水印\\SSM1.0")
                .build());



        for (int i = 0; i < nameList.size(); i++){
            KeyValueDto keyValueDto = nameList.get(i);

            String text = "源码多多网：www.alsymdd.cn";
            // 输入 ， 输出 ， 文本
            processImagesInFolder(keyValueDto.getKey(), keyValueDto.getValue(), text);
        }

    }

    public static void addTextToImage(String inputImagePath, String outputImagePath, String text) {
        try {
            // 读取图片
            File inputFile = new File(inputImagePath);
            BufferedImage image = ImageIO.read(inputFile);

            if (image == null) {
                System.err.println("读取图片失败: " + inputImagePath);
                return;
            }

            // 创建 Graphics2D 对象
            Graphics2D g2d = image.createGraphics();
            // 设置抗锯齿
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            // 设置字体和颜色
            Font font = new Font("Microsoft YaHei", Font.PLAIN, 40);
            g2d.setFont(font);
            g2d.setColor(Color.RED);

            // 获取图片尺寸
            int width = image.getWidth();
            int height = image.getHeight();

            // 计算文字位置（右下角）
            FontMetrics fm = g2d.getFontMetrics();
            int textWidth = fm.stringWidth(text);
            int textHeight = fm.getHeight();
            int x = width - textWidth - 20;
            int y = height - textHeight / 2 - 20;

            // 绘制文字
            g2d.drawString(text, x, y);

            // 释放 Graphics2D 对象
            g2d.dispose();

            // 保存图像
            File outputFile = new File(outputImagePath);
            // 尝试使用 JPEG 格式
            ImageIO.write(image, "JPEG", outputFile);
            System.out.println("文字添加成功，保存为: " + outputImagePath);
        } catch (IOException e) {
            System.err.println("操作图片时发生 IO 异常: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * @param sourceFolder 输入
     * @param targetFolder 输出
     * @param text 文本
     * @return
     * @Date: 2024/9/13
     */
    public static void processImagesInFolder(String sourceFolder, String targetFolder, String text) {
        File sourceDir = new File(sourceFolder);
        File targetDir = new File(targetFolder);

        // 创建目标目录（如果不存在）
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }

        // 遍历源目录中的所有子目录
        File[] subDirs = sourceDir.listFiles(File::isDirectory);
        if (subDirs != null) {
            for (File subDir : subDirs) {
                String subDirName = subDir.getName();
                File targetSubDir = new File(targetDir, subDirName);

                // 创建子目录
                if (!targetSubDir.exists()) {
                    targetSubDir.mkdirs();
                }

                // 遍历子目录中的所有图片文件
                File[] files = subDir.listFiles((dir, name) -> name.endsWith(".jpg") || name.endsWith(".png"));
                if (files != null) {
                    for (File file : files) {
                        String fileName = file.getName();
                        String sourceImagePath = file.getAbsolutePath();
                        String targetImagePath = new File(targetSubDir, fileName).getAbsolutePath();

                        // 处理图片
                        addTextToImage(sourceImagePath, targetImagePath, text);
                    }
                } else {
                    System.err.println("无法读取源子目录: " + subDir.getAbsolutePath());
                }
            }
        } else {
            System.err.println("无法读取源目录: " + sourceFolder);
        }
    }


    
}
